package com.jz.banner.screen.net.observer

import com.jz.banner.screen.bean.BaseBean
import io.reactivex.Observer
import io.reactivex.disposables.Disposable

/**
 * 创建者     Noel
 * 创建时间   2018/1/20 16:55
 * 描述	       对Observer 根据Pay后台返回的状态封装。
 */


abstract class BasePayObserver<T> : Observer<BaseBean<out T>> {
    protected var mDisposable: Disposable? = null

    override fun onNext(t: BaseBean<out T>) {
        when (t.code) {
            0 -> { //请求成功
                if (t.data != null) {
                    onSuccessNext(t)
                } else {
                    dataIsNull(t)
                }
            }
            10000 -> {
                setOnError(t)
            }
            -22222 -> {
                setOnError(t)
            }
            -23333 -> {
                setOnError(t)
            }
            -24444 -> {
                setOnError(t)
            }
            11111 -> {
                setOnError(t)
            }
            else -> { //0失败，或者其他原因
                setOnError(t)
            }
        }
    }

    private fun setOnError(t: BaseBean<out T>) {
        onError(IllegalStateException(t.code.toString().plus(":").plus(t.msg)))
    }


    /*请求数据基类返的data为空*/
    protected open fun dataIsNull(t: BaseBean<out T>) {
        if (!isHandleRequestMultiData()) mDisposable?.dispose()
    }

    protected abstract fun onSuccessNext(t: BaseBean<out T>)

    /*开启处理异步请求多个数据，同步处理。例如：false之后，一旦其中一个请求失败或者为空，则取消剩余的请求*/
    protected open fun isHandleRequestMultiData(): Boolean = false
}
